//
//  DMInterstitialManager.h
//  DualMediationSDK
//
//  Created by YeJary on 2025/7/9.
//

#import <Foundation/Foundation.h>
#import "DMAdDelegate.h"
#import "DMInterstitialScenes.h"

NS_ASSUME_NONNULL_BEGIN

/**
 * IronSource插屏广告管理器
 * 支持场景化广告展示，与Android接口保持一致
 */
@interface DMInterstitialManager : NSObject

/// 插屏广告回调代理
@property (nonatomic, weak, nullable) id<DMAdDelegate> delegate;

/// 是否启用时间场景拦截（默认YES）
@property (nonatomic, assign) BOOL interTimeSceneEnabled;

/**
 * 获取单例实例
 * @return 插屏广告管理器实例
 */
+ (instancetype)shareInterstitialManager;

/**
 * 初始化插屏广告代理
 */
- (void)interstitialDelegate;

/**
 * 展示插屏广告（兼容旧接口）
 */
- (void)showInterstitial;

/**
 * 展示指定场景的插屏广告
 * @param adScene 广告场景，使用DMInterstitialScenes中定义的常量
 */
- (void)showInterAd:(NSString *)adScene;

/**
 * 设置时间场景拦截开关
 * @param enable YES启用拦截，NO禁用拦截
 */
- (void)setInterTimeSceneEnable:(BOOL)enable;

/**
 * 预加载插屏广告
 */
- (void)loadInterstitial;

/**
 * 检查广告是否准备就绪
 * @return YES表示广告已准备就绪
 */
- (BOOL)isAdReady;


// 双广告位支持属性
@property (nonatomic, assign) BOOL isDualAdEnabled;
@property (nonatomic, strong) NSString *currentPrimaryAdUnitId;
@property (nonatomic, strong) NSString *currentSecondaryAdUnitId;
@property (nonatomic, assign) BOOL isPrimaryAdLoaded;
@property (nonatomic, assign) BOOL isSecondaryAdLoaded;
@property (nonatomic, assign) double primaryAdECPM;
@property (nonatomic, assign) double secondaryAdECPM;

// 双广告位支持方法
- (void)loadDualInterstitialAds;
- (NSString *)selectOptimalAdUnitId;
- (void)switchToSecondaryAdIfNeeded;

// 重试机制相关属性
@property (nonatomic, assign) NSInteger maxRetryCount;        // 最大重试次数
@property (nonatomic, assign) NSInteger currentRetryCount;   // 当前重试次数
@property (nonatomic, assign) NSTimeInterval baseRetryInterval; // 基础重试间隔
@property (nonatomic, assign) NSInteger totalLoadAttempts;   // 总加载尝试次数
@property (nonatomic, assign) NSInteger totalFailures;       // 总失败次数
@property (nonatomic, assign) NSTimeInterval lastRetryTime;   // 上次重试时间
@property (nonatomic, assign) BOOL isRetryPaused;            // 是否暂停重试
@property (nonatomic, strong) NSTimer *retryTimer;           // 重试定时器

// 重试机制相关方法
- (void)initializeRetrySettings;                    // 初始化重试设置
- (void)resetRetryState;                           // 重置重试状态
- (void)scheduleRetryWithDelay:(NSTimeInterval)delay; // 安排延迟重试
- (BOOL)shouldRetry;                               // 判断是否应该重试
- (NSTimeInterval)calculateRetryDelay;             // 计算重试延迟时间
- (void)performRetry;                              // 执行重试
- (void)cancelRetryTimer;                          // 取消重试定时器
- (double)calculateFailureRate;                    // 计算失败率

@end

NS_ASSUME_NONNULL_END
